home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / lib / tcl / demos / mkPlot.tcl < prev    next >
Text File  |  1992-08-13  |  2KB  |  78 lines

  1. # mkPlot w
  2. #
  3. # Create a top-level window containing a canvas displaying a simple
  4. # graph with data points that can be moved interactively.
  5. #
  6. # Arguments:
  7. #    w -    Name to use for new top-level window.
  8.  
  9. proc mkPlot {{w .plot}} {
  10.     catch {destroy $w}
  11.     toplevel $w
  12.     dpos $w
  13.     wm title $w "Plot Demonstration"
  14.     wm iconname $w "Plot"
  15.     set c $w.c
  16.  
  17.     frame $w.frame1 -relief raised -bd 2
  18.     canvas $c -relief raised -width 450 -height 300
  19.     button $w.ok -text "OK" -command "destroy $w"
  20.     pack append $w $w.frame1 {top fill} $w.c {expand fill} \
  21.         $w.ok {bottom pady 10 frame center}
  22.     message $w.frame1.m -font -Adobe-Times-Medium-R-Normal-*-180-* -aspect 300 \
  23.         -text "This window displays a canvas widget containing a simple 2-dimensional plot.  You can doctor the data by dragging any of the points with mouse button 1."
  24.     pack append $w.frame1 $w.frame1.m {frame center}
  25.  
  26.     set font -Adobe-helvetica-medium-r-*-180-*
  27.  
  28.     $c create line 100 250 400 250 -width 2
  29.     $c create line 100 250 100 50 -width 2
  30.     $c create text 225 20 -text "A Simple Plot" -font $font -fill brown
  31.     
  32.     for {set i 0} {$i <= 10} {incr i} {
  33.     set x [expr {100 + ($i*30)}]
  34.     $c create line $x 250 $x 245 -width 2
  35.     $c create text $x 254 -text [expr 10*$i] -anchor n -font $font
  36.     }
  37.     for {set i 0} {$i <= 5} {incr i} {
  38.     set y [expr {250 - ($i*40)}]
  39.     $c create line 100 $y 105 $y -width 2
  40.     $c create text 96 $y -text [expr $i*50].0 -anchor e -font $font
  41.     }
  42.     
  43.     foreach point {{12 56} {20 94} {33 98} {32 120} {61 180}
  44.         {75 160} {98 223}} {
  45.     set x [expr {100 + (3*[lindex $point 0])}]
  46.     set y [expr {250 - (4*[lindex $point 1])/5}]
  47.     set item [$c create oval [expr $x-6] [expr $y-6] \
  48.         [expr $x+6] [expr $y+6] -width 1 -outline black \
  49.         -fill SkyBlue2]
  50.     $c addtag point withtag $item
  51.     }
  52.  
  53.     $c bind point <Any-Enter> "$c itemconfig current -fill red"
  54.     $c bind point <Any-Leave> "$c itemconfig current -fill SkyBlue2"
  55.     $c bind point <1> "plotDown $c %x %y"
  56.     $c bind point <ButtonRelease-1> "$c dtag selected"
  57.     bind $c <B1-Motion> "plotMove $c %x %y"
  58. }
  59.  
  60. set plot(lastX) 0
  61. set plot(lastY) 0
  62.  
  63. proc plotDown {w x y} {
  64.     global plot
  65.     $w dtag selected
  66.     $w addtag selected withtag current
  67.     $w raise current
  68.     set plot(lastX) $x
  69.     set plot(lastY) $y
  70. }
  71.  
  72. proc plotMove {w x y} {
  73.     global plot
  74.     $w move selected [expr $x-$plot(lastX)] [expr $y-$plot(lastY)]
  75.     set plot(lastX) $x
  76.     set plot(lastY) $y
  77. }
  78.